ハサミ将棋AI 思考アルゴリズム

1 状態空間の定義

1.1 状態 s

s = (B, T)

1.2 盤面

B(x,y) ∈ { 歩, と, ∅ }

各マスには「歩」「と」「空」のいずれかが存在する。

2. 行動集合と状態遷移

2.1 行動集合

行動sからとれる合法な手はA(s)として表現する。
行動集合A(s) = { (x,y) → (x',y') | すべて合法手 }

2.2 状態遷移関数

状態遷移関数をTとし、そこに現在の状態sと、合法手aを代入すると、次の状態s´になる。つまり、1手指したあとの状態。
s' = T(s, a)

3. 終端状態

terminal(s) = { true (駒数 ≤ 3) false (それ以外) }

どちらかの駒数が3以下になった時点でゲーム終了とする。

4. 木と分岐数

ゲームの進行は木として表現される。

5.1 分岐数

平均分岐数bを以下のように見積もる

b ≒ 駒数 × 平均移動数 ≒ 9 × 10 = 90

5. ミニマックス法

5.1 価値関数 V(s)

今回の評価基準は 1. 端を避ける 2. 動けやすい 3. 危険を回避 4. 駒の数が多い
V(s) = { Eval(s) (終端 or 深さ0) maxₐ V(T(s,a)) (CPU手番) minₐ V(T(s,a)) (人手番) }

CPUは常に「最悪の場合でも最大の結果」を選択する。

6. 評価関数 Eval(s)

6.1 線形評価モデル

Eval(s) = Σ wᵢ fᵢ(s)

7.2 特徴量

特徴数式
駒差#to − #hu
中央支配Σ c(p)
可動性合法手数差

7.3 重み例

Eval(s) = 100·f₁ + 5·f₂ + 2·f₃

8. αβ枝刈り

探索中、以下が成立した時点で探索を中断する。

α ≥ β ⇒ 枝刈り

これにより計算量は理論上、

O(b^d) → O(b^(d/2))

まで削減される。

9. 反復深化探索

深さを1から順に増やして探索する。

depth = 1
while(時間が残っている){
  探索(depth)
  depth++
}

時間切れでも、最後に完全探索できた結果が必ず残る。

10. 停止保証

探索開始時刻 t₀ と現在時刻 t を比較する。

t − t₀ > 制限時間 ⇒ 即終了

これによりフリーズは理論上起こり得ない。

11. 人間の思考との対応

人間の感覚数理的意味
危ないmin値が低い
囲まれる可動性低下
中央が強いf₂増大
一気に取られるf₁急減

12. 総括

このAIは、有限零和完全情報ゲームに対し、

argmaxₐ ( min 相手返し ( Eval(s) ) )

を、時間制限下で最適に近似するアルゴリズムである。

これは「思考しているように見える」のではなく、 数学的に正しく思考していることを意味する。